Many known computer systems are sold in the form of a basic unit which, however, is expandable by the user. For example, the architecture may include a plurality of card slots in some type of housing where the slots are interconnected by a bus. In such a computer system, a basic unit, may have one or more card slots which are unpopulated. The computer system can be expanded by inserting a component such as an appropriate printed circuit card (or feature card) in an empty slot. Many such feature cards have a personality which is at least partially defined by software stored in a Read Only Memory, hereinafter referred to as ROM code. One of the necessary prerequisites to effectively using such a feature card is the ability for the system as a whole to address the ROM code. Typically, the computer system architecture provides for a read only memory space for ROM code of the computer system, taken as a whole. This read only memory space is not expandable, i.e. all of the ROM code for whatever feature cards are added, as well as the ROM code of the computer system in its basic state, must fit within this read only memory space.
One example of such an expandable computer system is manufactured by International Business Machines Corp. and is sold under the P/S 2 trademark. This family of computer systems includes a configuration utility which can automatically perform certain functions necessary to the utilization of feature cards which are added to the computer system. One of the functions performed by the configuration utility is locating the ROM code of the feature card(s) in the read only memory space in a fashion so as to not interfere with preexisting ROM code which had already been located in the memory space and other ROM code on other feature cards. The configuration utility generally assigns the ROM code to one or more 8K segments in the read only memory space.
The term "locating" as used above, and as it is used in the remainder of this application, does not refer to physically moving any ROM code; the ROM code is physically stored in a memory device on the feature card. The term "locating" refers to assigning an address to the ROM code, i.e. mapping the ROM code in read only memory space.
Because the read only memory space for ROM code is limited, it is important to use that memory space as efficiently as possible.
In the prior art, ROM code was located on a memory boundary whose address was an integer multiple of that portion of memory space required for the capacity of the ROM (not the extent of the ROM code). For example, if the ROM code occupied up to 16K bytes of memory space, that ROM code would be stored in a 16K ROM and the ROM code would be located in the read only memory space beginning at an address which was an integer multiple of 16K. It should be apparent that given the fact that the read only memory space is limited, the necessity for locating the ROM code at such a location could render use of the read only memory space less than efficient. Taking a concrete example, assume the dedicated read only memory space available was limited to 128K, then there are only eight possible locations for a block of 16K ROM code. If, for example, memory space beginning at an address of 24K was available, the read only memory space from 24K to 32K could go unused, and the 16K of ROM code would be located at the 32K address boundary, and occupy addresses from 32K to 48K. On the other hand, if the 16K of ROM code could be located at the address of 24K, then it could employ the address space from 24K to 40K.
Furthermore, while feature cards should provide for freely locating ROM code, it is true that some feature cards require ROM code to be located at specific addresses in read only memory space. It should be apparent that this condition further exacerbates the problem in that it makes it more likely that one or more read only memory space segments are difficult or impossible to use.
In general, prior art location of ROM code was restricted to addresses which were integer multiples of the size of the ROM or, stated differently, even multiples of half the size of the ROM. Boundaries equal to odd integer multiples of half the size of the ROM could not be used.